הקראקמי הראשון שלי - SBD
טוב לכל ה"טירונים" מביניכם [כמוני] שמתעסקים בקראקינג ויותר בתהליכי למידה....ועכשיו אחרי שפרצו כמה קראקמי די פשוטים
בעצם תוהים איך עושים את זה...? אז כמובן לאלה מביניכם שיודעים VB או כל שפת תכנות ניסו להכין דברים כמו משהו כזה:
private sub command1_click()
dim pass as string
pass = "password"
if text1.text = pass then
msgbox "Well Done!"
else
msgbox "Wrong Pass"
end if
end sub
מה שזה עושה זה פשוט הוא בודק קלט של תיבת טקסט ומשווה אותו לסיסמא שאתם בוחרים אם זה נכון או אם זה לא נכון זה מציג הודעה בהתאם.
אחרי שעשיתם את זה בטח הראתם את זה לחברים ואמרתם להם הנה הקראקמי הראשון שלי בחיאת תנסה לפרוץ...
להפתעתכם גיליתם כי הפריצה של דבר כזה ממש הייתה משחק ילדים ועם דיאבגר פשוט יהיה ניתן לגלות את הסיסמא
בשני דקות.
אם כן? תמשיכו לקרוא....במקרה ולא אל תמשיכו...לא סתם אתם יכולים אבל בעקרון המדריך הזה למתחילים...ואינו נועד למתקדמים בתחום.
איך זה עובד?
-----------------
OK עכשיו נגיע לבניית הקראקמי הראשון שלכם עם הגנה קצת יותר מתוחכמת אשר תדרוש יותר מאמץ לפרוץ את הקראקמי...
הרעיון עובד על אותו רעיון רק שהפעם הסיסמא לא תהיה קבועה אלא תהיה תלויה בשם משתמש מה שאומר שלכל שם משתמש
אחר יש סיסמא אחרת, דבר זה ימנע מלראות ערך של משתנה שבעצם הוא הסיסמא ואז לפרוץ את הקראקמי ללא בעיה.
איך עושים את זה אתם שואלים? אז העקרון מאוד פשוט:
אנחנו לוקחים כל אות בשם המשתמש הופכים אותו למספר [במקרה שלו לתו ה-ASCII שלה...] ועל אותו מספר אנחנו עושים פעולות חשבוניות
אשר בעצם "יצפינו" את אותו תו, לאחר מכן אחרי שעשינו את הפעולות החשבוניות על כל התווים אנחנו נחבר אותם ביחד והופ- יש לנו סיסמא מותאמת
לשם המשתמש - כמובן שמה שיהיה פה יהיו פעולות חשבוניות פשוטות ביותר אבל זה רק לצורך הדגמה...אתם יכולים לשים כל משוואה שהיא
ובכך להקטין את הסיכויים לפריצת הקראקמי שלכם.
ולסיום לפני שנתחיל בכתיבה של הדבר הזה:
הקראקמי שנבנה אינו יהיה מוגן מפני Patch שזה אומר שינוי ערך מסוים של TRUE ל-FALSE או שינוי ערך של משתנה והוספת ברייק פוינטים למיניהם וכו' וכו'...
הקראקמי יהיה מוגן רק מפני דיבאגר פשוט אשר מראה את ערכי המשתנים וכד'...מכיוון שכאן לא יהיה ערך קבוע לא יהיה ניתן או יותר נכון יהיה מאוד מאוד קשה
לפרוץ את עם דיבאגר...
כמובן שאל תשימו את ההגנה הזאת על תוכנה שלכם או משהו כזה חחח...יפרצו אותה בתוך שניה...המטרה של המדריך רק ללמד קצת תכנות וטכניקות הגנה...
הגנות יותר מתקדמות אולי [כנראה] יהיו במדריך אחר בגיליונות הבאים...
הקוד עצמו:
-------------
טוב עכשיו נעבור לשלב כתיבת הקוד...בתור התחלה ניצור על הטופס שלושה פקדים:
2 תיבות טקסט [TextBox]
וכפתור אחד [CommandButton]
את התיבה הראשונה נשתמש להכנסת שם המשתמש
בתיבה השניה נשתמש להקלדת הסריאל
והכפתור בעצם יבצע את הבדיקה.
שים לב: אין לשנות את שמות הפקדים או את סדרם...[אחרי זה תוכלו אבל תצטרכו להתאים לכך את הקוד...]
עכשיו נעבור לקוד עצמו:
1. נצהיר על כמה משתנים אשר יעזרו לנו ביצירת התוכנית:
Dim fLat
Dim outL
Dim result
המשתנה הראשון בעצם יחזיק את התו[אות\מספר] שעליו נחיל את הפעולה
המשתנה השני יחזיק את התוצאה של אותו התו לאחר הפיכתו למספר ולאחר ביצוע הפעילות החשבונית
והמשתמש השלישי יחזיק את כל התווים יחדיו שהם בעצם יהיו ה-SERIAL בסוף...בעצם עם משתנה זה אנחנו נשווה את הקלט של השתמש
ונראה האם הסריאל הוא סריאל "חוקי".
2. עכשיו ניצור לולאה אשר בעצם תעבור תו אחרי תו ותחיל עליו פעולה מסוימת:
for i = 1 to len(text1.text)
מה שעשינו פה יצרנו לולאת פור בשם I והגדרנו לה טווח של מספרים [הפעמים שהיא תעבוד] בין 1 למספר התווים של שם המשתמש
3. עכשיו נכתוב את הקוד שיהיה בעצם בתוך הלולאה ובעצם "יצפין" את הטקסט:
בהתחלה נכניס למשתמש הראשון [fLat] את התו הראשון של שם המשתמש על ידי כך:
fLat = Mid$(Text1.Text, i, 1)
מה שעשינו התשמשנו בפונקציה מובנת של VB בשם MID אשר יכולה לקחת מחרוזת מתוך טקסט, היא בנויה כך:
MID$(the text, star position, number of char)
כלומר במקרה שלנו היא תיקח את הטקסט מתוך התיבת טקסט הראשונה שכן היא תיבת שם המתשתמש היא תתחיל לקחת את הטקסט
מ-I שזה בעצם הלולאה שעשינו כלומר בהתחלה זה יהיה 1 אחרי זה 2 אחרי זה 3 וכו'...עד שיגמרו כל התווים
וה-1 בעצם קובע את האורך שכן אנחנו רוצים לקחת רק תו 1 אז כתבנו שם 1
4. עכשיו נהפוך את התו למספר [כדי שנוכל להחיל עליו פעולה חשבונית כל שהיא] על ידי הפיכתו לקוד ה-ASCII שלו והכנסת הפלט למשתנה השני שלנו [outL] :
outL = Asc(fLat)
מה שעשינו פה השתמשנו בפונקציה מובנת של VB בשם ASC אשר לוקחת כקלט מחרוזת טקסט פונקציה מספר ובעצם כל דבר שאפשר
ונותנת כפלט את תו האסקי שלו. [אם אתם רוצים לראות את כל תווי האסקי תוכלו למצוא את זה בגוגל תחת החיפוש: ASCII TABLE]
עכשיו אחרי שהפכנו את התו למספר נתחיל לעשות עליו פעולה חשבונית, רק לדוגמא אני יעשה פעולה חשובנית פשוטה ביותר רק לצורך הבנה, אני פשוט יחלק
את ערך האסקיי שלו ב-2:
outL = Asc(fLat)*2
5. עכשיו חלק זה של המדריך אינו חובה אך כדי לקרוא וגם עדיך להשתמש, עכשיו אנחנו נחליף כל נקודה ב-| [הנקודות יווצרו לנו במקרה וקוד האסקיי יהיה אי-זוגי ואז
אחרי החילוק בשתים תתקבל תוצאה עם נק' עשרונית.]
לצורך משימה זו אנחנו נשתמש בפונקציה מובנית של VB בשם RePlace מה שהפונקציה עושה זה פשוט מאוד היא לוקחת מחרוזות,
משתנה, מספרים ובעצם כל דבר מחפש בו קטע טקסט מסוים [או משתנה...] ומחליפה אותו בקטע טקסט אחר, בדוגמא שלנו:
outL = Replace(outL, ".", "|")
6. עכשיו הגיע הזמן לקחת את מה שיצא לנו עד עכשיו ולהכניסו למשתנה השלישי [Result] אשר יאגור את כל התווים אחרי "ההצפנה" ובעצם יכיל את הסריאל
שישמש להשוואה עם קלט מן המשתמש.
result = result & outL
מה שעשינו לקחנו את המשתנה RESULT הכנסנו לו את עצמו [שבהתחלה זה כלום אבל אחרי זה זה יכיל את התו הראשון אז את השני וכו'..אחרי ההצפנה]
והוספנו לו את התו הנוכחי לאחר ההצפנה שלו.
7. עכשיו נסגור את הלולאה:
Next i
ולסיכום מה שיצא לנו עד כה:
For i = 1 To Len(Text1.Text)
fLat = Mid$(Text1.Text, i, 1)
outL = Asc(fLat)/2
outL = Replace(outL, ".", "|")
result = result & outL
Next i
8. זהו כעקרון הפעולה הסתיימה עכשיו בעצם נעבור לפעולה של הבדיקה:
If Text2.Text = result Then
MsgBox "Good Serial"
Else
MsgBox "Wrong Serial"
End If
מה שעשינו השוונו את התיבת טקסט השניה שבעצם מכילה את הסיריאל שהכניס המשתמש והשוונו אותו עם הסיריאל שאמור בעצם להיות נכון,
אם הם שווים תינתן הודעה אשר אומרת כי הסיריאל נכון, אבל במקרה ולא תינתן הודעה שהסריאל אינו נכון.
9. כמובן את כל הקוד הנ"ל שמים בשגרת ה"הקלקה" של הכפתור יענתו בין התווים:
Private Sub Command1_Click()
' the code
End Sub
10. עכשיו קצת למנוע באגים ולסידור טיפה, בתור התחלה אנחנו צריכים לבדוק
כי המשתמש הכניס שם וסיריאל אחרת אם הוא ילחץ על הכפתור תינתן הודעה נכונה
כי שני המחרוזות יהיו שוות...לכן נכניס את הקוד הבא אחרי החזרה על המשתנים:
If Text1.Text = "" Or Text2.Text = "" Then
MsgBox "One or more fileds are empty...!"
Else
אחרי ה-ELSE בעצם יבוא הקוד שכתבנו עד עכשיו....
לאחר מכן אנחנו צריכים להגדיר את המשתנה RESULT כ-"" יענתו כלום...אחרת הוא בעצם יהיה 0 לכן נכניס אחרי השורה ELSE ולפני הקוד שכתבנו את המשפט:
result = ""
עכשיו על מנת לסגור את התנאי נכניס בסוך הקוד שלנו END IF
התוצאה הסופית
--------------------
ולסיכום זה מה שיצא לנו:
Private Sub Command1_Click()
Dim fLat
Dim outL
Dim result
If Text1.Text = "" Or Text2.Text = "" Then
MsgBox "One or more fileds are empty...!"
Else
result = ""
For i = 1 To Len(Text1.Text)
fLat = Mid$(Text1.Text, i, 1)
outL = Asc(fLat)/2
outL = Replace(outL, ".", "|")
result = result & outL
Next i
If Text2.Text = result Then
MsgBox "Good Serial"
Else
MsgBox "Wrong Serial"
End If
End If
End Sub
עכשיו תלחצו על F5 ותבדקו את התוכנית במקרה שהכול עובד סבבה והבנתם את הכל ועשיתם כמו שצריך, במקרה ולא
תקראו את המדריך הקטן הזה שוב אולי עשיתם משהו לא טוב, אם חיפשתם ולא מצאתם פשוט תעתיקו את הקוד הנ"ל שזהו בעצם הקוד הסופי
ותבדקו, אמור לעבוד במקרה ולא יש תמיד את הפורמים או איסי: 5153520
.:: שלכם תמיד SBD ::.